package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.Room;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 会议室管理Mapper接口
 *
 * @author ruoyi
 * @date 2025-01-06
 */
public interface RoomMapper
{
    /**
     * 查询会议室管理
     *
     * @param roomId 会议室管理主键
     * @return 会议室管理
     */
    public Room selectRoomByRoomId(Long roomId);

    /**
     * 查询会议室管理列表
     *
     * @param room 会议室管理
     * @return 会议室管理集合
     */
    public List<Room> selectRoomList(Room room);

    /**
     * 新增会议室管理
     *
     * @param room 会议室管理
     * @return 结果
     */
    public int insertRoom(Room room);

    /**
     * 修改会议室管理
     *
     * @param room 会议室管理
     * @return 结果
     */
    public int updateRoom(Room room);

    /**
     * 删除会议室管理
     *
     * @param roomId 会议室管理主键
     * @return 结果
     */
    public int deleteRoomByRoomId(Long roomId);

    /**
     * 批量删除会议室管理
     *
     * @param roomIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteRoomByRoomIds(Long[] roomIds);

    /**
     * 检查会议室地点是否已存在
     *
     * @param roomAddress 会议室地点
     * @return 结果
     */
    @Select("SELECT COUNT(1) FROM room WHERE room_address = #{roomAddress} AND is_deleted = 0")
    int checkRoomAddressExists(@Param("roomAddress") String roomAddress);

    /**
     * 检查会议室地点是否与其他会议室重复（更新时使用）
     *
     * @param roomAddress 会议室地点
     * @param roomId 会议室ID
     * @return 结果
     */
    @Select("SELECT COUNT(1) FROM room WHERE room_address = #{roomAddress} AND room_id != #{roomId} AND is_deleted = 0")
    int checkRoomAddressExistsForUpdate(@Param("roomAddress") String roomAddress, @Param("roomId") Long roomId);

    @Select("select * from room where room_address like concat('%',#{roomAddress},'%') and " +
            "room_max>=#{roomMax} and (status >=#{status1} or status = #{status2})")
    List<Room> selectRoomListBySearch(@Param("roomAddress")String roomAddress,
                                      @Param("roomMax")Long roomMax,
                                      @Param("status1")String status1,
                                      @Param("status2")String status2);

    /**
     * 批量查询会议室信息
     */
    List<Room> selectRoomByMeetIds(@Param("meetIds") List<Long> meetIds);
}
